#include "Coloracao.h"
#include "Geral.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>


int main(int argc, char *argv[])
{
    int **matrizGrafo;
    char arquivo[] = "entrada11.txt";
    int numCromatico;

    matrizGrafo = Construir_matriz(arquivo);

    int* ordem = geraVetorOrdem(n);

    permutacoes = criaVetorPermutacoes(n);

    // gera as permutacoes e armazena na matriz 'permutacoes'
    geraPermutacoes(ordem, 0, n);

    // DEBUG:// PENDENTE
    FILE* out = fopen("debug.txt", "w");

    // colore o grafo com a primeira permutacao
    // calcula o numero cromatico aproximado
    int numCromaticoAprox = Col_aproximada(matrizGrafo, n, permutacoes[0]);
    numCromatico = numCromaticoAprox;
    
    // calculo do tempo
    clock_t inicio, fim;
    inicio = clock();
    
    int i, num;
    int nPermut = fatorial(n);
    for (i=1; i<nPermut; i++) {

        num = Col_aproximada(matrizGrafo, n, permutacoes[i]);    
        
        if (num < numCromatico)
           numCromatico = num;
        
        // DEBUG: // PENDENTE
        print(out, permutacoes[i], n);
        fprintf(out, " - numero cromatico: %d\n", numCromatico);
    }
    
    fim = clock();
    float tempo = ( (float)fim -(float)inicio ) / ( (float)CLOCKS_PER_SEC );
    
    printf("Numero Cromatico Exato: %d\n", numCromatico);
    printf("Numero Cromatico Aproximado: %d\n", numCromaticoAprox);
    printf("tempo: %f seg.\n", tempo);
    Liberar_matriz(matrizGrafo);
    
    system("PAUSE");	  // PENDENTE  
    return 0;
}





